
// UI交互工具类

// 提示消息
const toast = {
  // 成功提示
  success(title, duration = 1500) {
    wx.showToast({
      title,
      icon: 'success',
      duration
    })
  },

  // 错误提示
  error(title, duration = 1500) {
    wx.showToast({
      title,
      icon: 'error',
      duration
    })
  },

  // 普通提示
  info(title, duration = 1500) {
    wx.showToast({
      title,
      icon: 'none',
      duration
    })
  },

  // 加载提示
  loading(title = '加载中...') {
    wx.showLoading({
      title,
      mask: true
    })
  },

  // 隐藏加载提示
  hideLoading() {
    wx.hideLoading()
  }
}

// 对话框
const dialog = {
  // 确认对话框
  async confirm(content, title = '提示') {
    try {
      const res = await wx.showModal({
        title,
        content,
        confirmColor: '#4A90E2'
      })
      return res.confirm
    } catch (err) {
      console.error('[确认对话框]失败：', err)
      return false
    }
  },

  // 成功对话框
  async success(content, title = '成功') {
    try {
      await wx.showModal({
        title,
        content,
        showCancel: false,
        confirmColor: '#4A90E2'
      })
      return true
    } catch (err) {
      console.error('[成功对话框]失败：', err)
      return false
    }
  },

  // 错误对话框
  async error(content, title = '错误') {
    try {
      await wx.showModal({
        title,
        content,
        showCancel: false,
        confirmColor: '#F56C6C'
      })
      return true
    } catch (err) {
      console.error('[错误对话框]失败：', err)
      return false
    }
  }
}

// 页面导航
const nav = {
  // 跳转到指定页面
  to(url) {
    wx.navigateTo({
      url
    })
  },

  // 返回上一页
  back(delta = 1) {
    wx.navigateBack({
      delta
    })
  },

  // 重定向到指定页面
  redirect(url) {
    wx.redirectTo({
      url
    })
  },

  // 切换到指定 tabBar 页面
  switchTab(url) {
    wx.switchTab({
      url
    })
  }
}

// 错误处理
const errorHandler = {
  // 通用错误处理
  async handle(err, title = '操作失败') {
    console.error('[错误处理]：', err)
    let content = '发生未知错误，请稍后重试'

    if (typeof err === 'string') {
      content = err
    } else if (err.errMsg) {
      content = err.errMsg
    } else if (err.message) {
      content = err.message
    }

    await dialog.error(content, title)
  },

  // 网络错误处理
  async handleNetworkError(err) {
    console.error('[网络错误]：', err)
    await dialog.error('网络连接失败，请检查网络后重试', '网络错误')
  },

  // 权限错误处理
  async handleAuthError(err) {
    console.error('[权限错误]：', err)
    const isConfirmed = await dialog.confirm('需要相关权限才能继续操作，是否前往设置？', '权限提示')
    if (isConfirmed) {
      wx.openSetting()
    }
  }
}

// 页面状态管理
const pageState = {
  // 设置导航栏标题
  setTitle(title) {
    wx.setNavigationBarTitle({
      title
    })
  },

  // 设置导航栏颜色
  setNavBarColor({ backgroundColor, frontColor = '#ffffff' }) {
    wx.setNavigationBarColor({
      backgroundColor,
      frontColor
    })
  },

  // 显示导航栏加载动画
  showNavLoading() {
    wx.showNavigationBarLoading()
  },

  // 隐藏导航栏加载动画
  hideNavLoading() {
    wx.hideNavigationBarLoading()
  },

  // 开启下拉刷新
  enablePullRefresh() {
    wx.startPullDownRefresh()
  },

  // 停止下拉刷新
  stopPullRefresh() {
    wx.stopPullDownRefresh()
  }
}

module.exports = {
  toast,
  dialog,
  nav,
  errorHandler,
  pageState
}